package main

import (
	"fmt"
	_ "gauss/docs"
	"gauss/internal/api"
	"gauss/internal/middleware"
	"gauss/internal/utils/db"
	"log"

	"github.com/gin-gonic/gin"
	"github.com/spf13/viper"
	swaggerFiles "github.com/swaggo/files"
	ginSwagger "github.com/swaggo/gin-swagger"
)

func main() {
	// 加载配置
	viper.SetConfigName("config")
	viper.SetConfigType("yaml")
	viper.AddConfigPath("./config")
	if err := viper.ReadInConfig(); err != nil {
		log.Fatalf("Error reading config file: %s", err)
	}

	// 初始化数据库连接
	db.InitMySQL()
	db.InitRedis()

	// 设置运行模式
	gin.SetMode(viper.GetString("server.mode"))

	// 创建路由引擎
	r := gin.Default()

	// 注册全局中间件
	r.Use(middleware.OperationLog())

	// 注册 Swagger 路由
	r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))

	// 创建API控制器
	userAPI := api.NewUserAPI()

	// API 路由组
	api := r.Group("/api")
	{
		// 公开路由
		public := api.Group("/public")
		{
			// 用户登录注册
			public.POST("/login", userAPI.Login)
			public.POST("/register", userAPI.Register)
		}

		// 需要认证的路由
		auth := api.Group("/")
		auth.Use(middleware.Auth())
		{
			// 用户相关接口
			users := auth.Group("/users")
			{
				users.GET("/info", userAPI.GetUserInfo)         // 获取个人信息
				users.PUT("/info", userAPI.UpdateUser)          // 更新个人信息
				users.PUT("/password", userAPI.UpdatePassword)  // 修改密码
				users.GET("/list", userAPI.ListUsers)          // 获取用户列表
				users.DELETE("/:id", userAPI.DeleteUser)       // 删除用户
			}
		}
	}

	// 启动服务器
	port := viper.GetString("server.port")
	if err := r.Run(fmt.Sprintf(":%s", port)); err != nil {
		log.Fatalf("Server failed to start: %s", err)
	}
} 